package medOffice;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * Classe que inicializa um Representante
 * @author Tiago Leite tiagohsl@lcc.ufcg.edu.br
 * @version 1.0
 *
 */
public class Representante {
        private String nome;
        private String firmaQueRepresenta;
        private int id;
        private int tempoLimite;
        private String telefone;
        private Calendar ultimaDataDeVisita;
        public static Calendar hoje;
        
        /**
         * Construtor da classe.
         * @param String nome 
         */
        public Representante (String nome) {
        	setNome(nome);
        }
        
        /**
         * Construtor auxiliar
         * @param String nome
         * @param String firma
         * @throws Exception quando firma/nome sao nulos ou vazios.
         */
        public Representante (String nome, String firma) throws Exception {                                             
                if (!Verificador.verificaNome(nome) ) {
                        throw new Exception("Nome invalido");
                }
                if (!Verificador.verificaNome(firma))
                	throw new Exception("Firma invalida");
                
                setNome(nome);
                setFirmaQueRepresenta(firma);
                
        }
        
        
        /**
         * Metodo acessador que retorna a firma que o representante trabalha
         * @return String firma
         */
        public String getFirmaQueRepresenta() {
                return firmaQueRepresenta;
        }
        
        
        /**
         * Metodo modificador que seta a firma que o representante trabalha.
         * @param String firmaQueRepresenta
         */
        public void setFirmaQueRepresenta(String firmaQueRepresenta) {
                if (firmaQueRepresenta != null && !firmaQueRepresenta.equals("")) {
                        this.firmaQueRepresenta = firmaQueRepresenta;
                }
        }
        
        /**
         * Metodo acessador que retorna o id do representante.
         * @return int id 
         */
        public int getId() {
                return id;
        }
        
        /**
         * Metodo modificador que seta o id do representante.
         * @param int id
         */
        public void setId(int id) {
                if (id > 0) {
                        this.id = id;
                }
        }
        
        /**
         * Metodo acessador que retorna o nome do representante.
         * @return String nome
         */
        public String getNome() {
                return nome;
        }
        
        /**
         * Metodo modificador que seta o nome do representante.
         * @param String nome
         */
        public void setNome(String nome) {
                if (nome != null && !nome.equals("") && Verificador.verificaNome(nome)) {
                        this.nome = nome;
                }
        }
        
        /**
         * Metodo acessador que retorna o tempo limite para que um representante possa ficar sem ir a Clinica.
         * @return int tempo
         */
        public int getTempoLimite() {
                return tempoLimite;
        }
        
        /**
         * Metodo modificador que seta o tempo limite de um representante.
         * @param int tempoLimite
         * @throws Exception caso o tempo seja negativo
         */
        public void setTempoLimite(int tempoLimite) throws Exception {
                if (tempoLimite > 0) {
                        this.tempoLimite = tempoLimite;
                } else {
                	throw new Exception("Tempo limite deve ser positivo");
                }
        }
        
        /**
         * Metodo acessador que retorna a ultima data que o representante visitou a clinica.
         * @return Calendar 
         */
        public Calendar getUltimaDataDeVisita() {
                return ultimaDataDeVisita;
        }
        
        /**
         * Metodo modificador que seta a ultima data que o representante visitou a clinica.
         * @param Calendar ultimaDataDeVisita
         * @throws Exception  caso a data seja invalida.
         */
        public void setUltimaDataDeVisita(Calendar ultimaDataDeVisita) throws Exception {
                hoje = new GregorianCalendar();
                if (ultimaDataDeVisita != null && ultimaDataDeVisita.compareTo(hoje) <= 0) {
                        this.ultimaDataDeVisita = ultimaDataDeVisita;
                } else {
                	throw new Exception("Data invalida");
                }
        }
        
        @Override
        public String toString() {
                return "Representante: " + getNome() + " | " + "Firma: " + getFirmaQueRepresenta();             

        }
        
        @Override
        public boolean equals(Object obj) {
                if (!(obj instanceof Representante)) {
                        return false;
                }               
                Representante rep = (Representante) obj;
                return rep.getId() == getId();
        }
        
        /**
         * Metodo acessador que resgata o telefone do representante.
         * @return String telefone
         */
		public String getTelefone() {
			return telefone;
		}

		/**
		 * Metodo modificador que seta o telefone do representante
		 * @param String telefone
		 */
		public void setTelefone(String telefone) {
			if (Verificador.verificaTelefone(telefone)) {
				this.telefone = telefone;
			}
		}
        
        

        
        
        
}
